મજબૂત પેરામીટર વેલિડેશન માટે જાવાસ્ક્રિપ્ટ ડેકોરેટર્સ વિશે જાણો. સ્વચ્છ અને વધુ વિશ્વસનીય કોડ માટે ડેકોરેટર આર્ગ્યુમેન્ટ ચેકિંગ કેવી રીતે લાગુ કરવું તે શીખો.
જાવાસ્ક્રિપ્ટ ડેકોરેટર્સ પેરામીટર વેલિડેશન માટે: ડેટાની અખંડિતતા સુનિશ્ચિત કરવી
આધુનિક જાવાસ્ક્રિપ્ટ ડેવલપમેન્ટમાં, ફંક્શન્સ અને મેથડ્સમાં પસાર થતા ડેટાની અખંડિતતા સુનિશ્ચિત કરવી સર્વોપરી છે. આ પ્રાપ્ત કરવા માટેની એક શક્તિશાળી તકનીક પેરામીટર વેલિડેશન માટે ડેકોરેટર્સનો ઉપયોગ છે. ડેકોરેટર્સ, જે જાવાસ્ક્રિપ્ટમાં Babel દ્વારા અથવા TypeScript માં મૂળભૂત રીતે ઉપલબ્ધ એક સુવિધા છે, તે ફંક્શન્સ, ક્લાસ અને પ્રોપર્ટીઝમાં કાર્યક્ષમતા ઉમેરવાનો એક સ્વચ્છ અને સુંદર માર્ગ પૂરો પાડે છે. આ લેખ જાવાસ્ક્રિપ્ટ ડેકોરેટર્સની દુનિયામાં ઊંડાણપૂર્વક જાય છે, ખાસ કરીને આર્ગ્યુમેન્ટ ચેકિંગમાં તેમના ઉપયોગ પર ધ્યાન કેન્દ્રિત કરે છે, અને તમામ સ્તરના ડેવલપર્સ માટે વ્યવહારુ ઉદાહરણો અને સમજ આપે છે.
જાવાસ્ક્રિપ્ટ ડેકોરેટર્સ શું છે?
ડેકોરેટર્સ એક ડિઝાઇન પેટર્ન છે જે તમને હાલના ક્લાસ, ફંક્શન અથવા પ્રોપર્ટીમાં ગતિશીલ અને સ્થિર રીતે વર્તણૂક ઉમેરવાની મંજૂરી આપે છે. સારમાં, તેઓ મૂળ કોડમાં ફેરફાર કર્યા વિના હાલના કોડને નવી કાર્યક્ષમતાથી "સુશોભિત" કરે છે. આ SOLID ડિઝાઇનના ઓપન/ક્લોઝ્ડ પ્રિન્સિપલને અનુસરે છે, જે જણાવે છે કે સોફ્ટવેર એન્ટિટીઝ (ક્લાસ, મોડ્યુલ્સ, ફંક્શન્સ, વગેરે) વિસ્તરણ માટે ખુલ્લા હોવા જોઈએ, પરંતુ ફેરફાર માટે બંધ હોવા જોઈએ.
જાવાસ્ક્રિપ્ટમાં, ડેકોરેટર્સ એ ખાસ પ્રકારની ઘોષણા છે જે ક્લાસ ઘોષણા, મેથડ, એક્સેસર, પ્રોપર્ટી અથવા પેરામીટર સાથે જોડી શકાય છે. તેઓ @expression સિન્ટેક્સનો ઉપયોગ કરે છે, જ્યાં expression એવા ફંક્શનમાં મૂલ્યાંકન કરવું આવશ્યક છે જે રનટાઇમ પર સુશોભિત ઘોષણા વિશેની માહિતી સાથે કૉલ કરવામાં આવશે.
જાવાસ્ક્રિપ્ટમાં ડેકોરેટર્સનો ઉપયોગ કરવા માટે, તમારે સામાન્ય રીતે Babel જેવા ટ્રાન્સપાઈલરનો ઉપયોગ કરવાની જરૂર છે જેમાં @babel/plugin-proposal-decorators પ્લગઇન સક્ષમ હોય. TypeScript ડેકોરેટર્સને મૂળભૂત રીતે સપોર્ટ કરે છે.
પેરામીટર વેલિડેશન માટે ડેકોરેટર્સનો ઉપયોગ કરવાના ફાયદા
પેરામીટર વેલિડેશન માટે ડેકોરેટર્સનો ઉપયોગ કરવાથી ઘણા ફાયદા થાય છે:
- સુધારેલી કોડ વાંચનીયતા: ડેકોરેટર્સ વેલિડેશન નિયમોને વ્યક્ત કરવાનો ઘોષણાત્મક માર્ગ પૂરો પાડે છે, જેનાથી કોડ સમજવામાં અને જાળવવામાં સરળ બને છે.
- બોઇલરપ્લેટ કોડમાં ઘટાડો: બહુવિધ ફંક્શન્સમાં વેલિડેશન લોજિકનું પુનરાવર્તન કરવાને બદલે, ડેકોરેટર્સ તમને તેને એકવાર વ્યાખ્યાયિત કરવાની અને તમારા કોડબેઝમાં લાગુ કરવાની મંજૂરી આપે છે.
- ઉન્નત કોડ પુનઃઉપયોગિતા: ડેકોરેટર્સને વિવિધ ક્લાસ અને ફંક્શન્સમાં પુનઃઉપયોગ કરી શકાય છે, જે કોડના પુનઃઉપયોગને પ્રોત્સાહન આપે છે અને રીડન્ડન્સી ઘટાડે છે.
- ચિંતાઓનું વિભાજન: વેલિડેશન લોજિક ફંક્શનના મુખ્ય બિઝનેસ લોજિકથી અલગ કરવામાં આવે છે, જેનાથી સ્વચ્છ અને વધુ મોડ્યુલર કોડ બને છે.
- કેન્દ્રીકૃત વેલિડેશન લોજિક: બધા વેલિડેશન નિયમો એક જ જગ્યાએ વ્યાખ્યાયિત કરવામાં આવે છે, જેનાથી તેમને અપડેટ અને જાળવવામાં સરળતા રહે છે.
ડેકોરેટર્સ સાથે પેરામીટર વેલિડેશન લાગુ કરવું
ચાલો જોઈએ કે જાવાસ્ક્રિપ્ટ ડેકોરેટર્સનો ઉપયોગ કરીને પેરામીટર વેલિડેશન કેવી રીતે લાગુ કરવું. અમે એક સરળ ઉદાહરણથી શરૂ કરીશું અને પછી વધુ જટિલ દૃશ્યો તરફ આગળ વધીશું.
મૂળભૂત ઉદાહરણ: સ્ટ્રિંગ પેરામીટરનું વેલિડેશન
એક ફંક્શનનો વિચાર કરો જે સ્ટ્રિંગ પેરામીટરની અપેક્ષા રાખે છે. અમે એ સુનિશ્ચિત કરવા માટે એક ડેકોરેટર બનાવી શકીએ છીએ કે પેરામીટર ખરેખર એક સ્ટ્રિંગ છે.
function validateString(target: any, propertyKey: string | symbol, parameterIndex: number) {
let existingParameters: any[] = Reflect.getOwnMetadata('validateParameters', target, propertyKey) || [];
existingParameters.push({ index: parameterIndex, validator: (value: any) => typeof value === 'string' });
Reflect.defineMetadata('validateParameters', existingParameters, target, propertyKey);
const originalMethod = target[propertyKey];
target[propertyKey] = function (...args: any[]) {
const metadata = Reflect.getOwnMetadata('validateParameters', target, propertyKey);
if (metadata) {
for (const item of metadata) {
const { index, validator } = item;
if (!validator(args[index])) {
throw new Error(`Parameter at index ${index} is invalid`);
}
}
}
return originalMethod.apply(this, args);
};
}
function validate(...validators: ((value: any) => boolean)[]) {
return function (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
for (let i = 0; i < validators.length; i++) {
if (!validators[i](args[i])) {
throw new Error(`Parameter at index ${i} is invalid`);
}
}
return originalMethod.apply(this, args);
};
};
}
function isString(value: any): boolean {
return typeof value === 'string';
}
class Example {
@validate(isString)
greet( @validateString name: string) {
return `Hello, ${name}!`;
}
}
const example = new Example();
try {
console.log(example.greet("Alice")); // Output: Hello, Alice!
// example.greet(123); // Throws an error
} catch (error:any) {
console.error(error.message);
}
સમજૂતી:
validateStringડેકોરેટરgreetમેથડનાnameપેરામીટર પર લાગુ કરવામાં આવે છે.- તે મેથડ સાથે સંકળાયેલ વેલિડેશન મેટાડેટાને સંગ્રહિત કરવા અને પુનઃપ્રાપ્ત કરવા માટે
Reflect.defineMetadataઅનેReflect.getOwnMetadataનો ઉપયોગ કરે છે. - મૂળ મેથડને કૉલ કરતા પહેલા, તે વેલિડેશન મેટાડેટા દ્વારા પુનરાવર્તન કરે છે અને દરેક પેરામીટર પર વેલિડેટર ફંક્શન લાગુ કરે છે.
- જો કોઈ પેરામીટર વેલિડેશનમાં નિષ્ફળ જાય, તો એક એરર ફેંકવામાં આવે છે.
validateડેકોરેટર પેરામીટર્સ પર વેલિડેટર્સ લાગુ કરવા માટે વધુ સામાન્ય અને કમ્પોઝેબલ માર્ગ પૂરો પાડે છે, જેનાથી દરેક પેરામીટર માટે બહુવિધ વેલિડેટર્સ સ્પષ્ટ કરી શકાય છે.isStringફંક્શન એક સરળ વેલિડેટર છે જે તપાસે છે કે મૂલ્ય સ્ટ્રિંગ છે કે નહીં.Exampleક્લાસgreetમેથડનાnameપેરામીટરને વેલિડેટ કરવા માટે ડેકોરેટર્સનો ઉપયોગ કેવી રીતે કરવો તે દર્શાવે છે.
ઉન્નત ઉદાહરણ: ઈમેલ ફોર્મેટનું વેલિડેશન
ચાલો એવો ડેકોરેટર બનાવીએ જે વેલિડેટ કરે કે સ્ટ્રિંગ પેરામીટર એક માન્ય ઈમેલ એડ્રેસ છે.
function validateEmail(target: any, propertyKey: string | symbol, parameterIndex: number) {
let existingParameters: any[] = Reflect.getOwnMetadata('validateParameters', target, propertyKey) || [];
existingParameters.push({ index: parameterIndex, validator: (value: any) => {
const emailRegex = /^[^\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g;
return typeof value === 'string' && emailRegex.test(value);
} });
Reflect.defineMetadata('validateParameters', existingParameters, target, propertyKey);
const originalMethod = target[propertyKey];
target[propertyKey] = function (...args: any[]) {
const metadata = Reflect.getOwnMetadata('validateParameters', target, propertyKey);
if (metadata) {
for (const item of metadata) {
const { index, validator } = item;
if (!validator(args[index])) {
throw new Error(`Parameter at index ${index} is not a valid email address`);
}
}
}
return originalMethod.apply(this, args);
};
}
class User {
register( @validateEmail email: string) {
return `Registered with email: ${email}`;
}
}
const user = new User();
try {
console.log(user.register("test@example.com")); // Output: Registered with email: test@example.com
// user.register("invalid-email"); // Throws an error
} catch (error:any) {
console.error(error.message);
}
સમજૂતી:
validateEmailડેકોરેટર પેરામીટર માન્ય ઈમેલ એડ્રેસ છે કે નહીં તે તપાસવા માટે રેગ્યુલર એક્સપ્રેશનનો ઉપયોગ કરે છે.- જો પેરામીટર માન્ય ઈમેલ એડ્રેસ ન હોય, તો એક એરર ફેંકવામાં આવે છે.
બહુવિધ વેલિડેટર્સનું સંયોજન
તમે validate ડેકોરેટર અને કસ્ટમ વેલિડેટર ફંક્શન્સનો ઉપયોગ કરીને બહુવિધ વેલિડેટર્સને જોડી શકો છો.
function isNotEmptyString(value: any): boolean {
return typeof value === 'string' && value.trim() !== '';
}
function isPositiveNumber(value: any): boolean {
return typeof value === 'number' && value > 0;
}
class Product {
@validate(isNotEmptyString, isPositiveNumber)
create(name: string, price: number) {
return `Product created: ${name} - $${price}`;
}
}
const product = new Product();
try {
console.log(product.create("Laptop", 1200)); // Output: Product created: Laptop - $1200
// product.create("", 0); // Throws an error
} catch (error:any) {
console.error(error.message);
}
સમજૂતી:
isNotEmptyStringવેલિડેટર તપાસે છે કે વ્હાઇટસ્પેસને ટ્રીમ કર્યા પછી સ્ટ્રિંગ ખાલી નથી.isPositiveNumberવેલિડેટર તપાસે છે કે મૂલ્ય એક પોઝિટિવ નંબર છે.validateડેકોરેટરનો ઉપયોગProductક્લાસનાcreateમેથડ પર બંને વેલિડેટર્સ લાગુ કરવા માટે થાય છે.
પેરામીટર વેલિડેશનમાં ડેકોરેટર્સનો ઉપયોગ કરવા માટેની શ્રેષ્ઠ પદ્ધતિઓ
પેરામીટર વેલિડેશન માટે ડેકોરેટર્સનો ઉપયોગ કરતી વખતે ધ્યાનમાં રાખવા માટે અહીં કેટલીક શ્રેષ્ઠ પદ્ધતિઓ છે:
- ડેકોરેટર્સને સરળ રાખો: ડેકોરેટર્સ વેલિડેશન લોજિક પર કેન્દ્રિત હોવા જોઈએ અને જટિલ ગણતરીઓ ટાળવી જોઈએ.
- સ્પષ્ટ એરર સંદેશા પ્રદાન કરો: ખાતરી કરો કે એરર સંદેશા માહિતીપ્રદ હોય અને ડેવલપર્સને વેલિડેશન નિષ્ફળતાઓ સમજવામાં મદદ કરે.
- અર્થપૂર્ણ નામોનો ઉપયોગ કરો: કોડ વાંચનીયતા સુધારવા માટે તમારા ડેકોરેટર્સ માટે વર્ણનાત્મક નામો પસંદ કરો.
- તમારા ડેકોરેટર્સનું દસ્તાવેજીકરણ કરો: તમારા ડેકોરેટર્સને સમજવામાં અને જાળવવામાં સરળ બનાવવા માટે તેમના હેતુ અને ઉપયોગનું દસ્તાવેજીકરણ કરો.
- પ્રદર્શનને ધ્યાનમાં લો: જ્યારે ડેકોરેટર્સ કાર્યક્ષમતા ઉમેરવાનો એક અનુકૂળ માર્ગ પૂરો પાડે છે, ત્યારે તેમના પ્રદર્શન પ્રભાવ વિશે સાવચેત રહો, ખાસ કરીને પ્રદર્શન-જટિલ એપ્લિકેશન્સમાં.
- ઉન્નત ટાઇપ સુરક્ષા માટે TypeScript નો ઉપયોગ કરો: TypeScript ડેકોરેટર્સ માટે બિલ્ટ-ઇન સપોર્ટ પૂરો પાડે છે અને ટાઇપ સુરક્ષાને વધારે છે, જેનાથી ડેકોરેટર-આધારિત વેલિડેશન લોજિક વિકસાવવા અને જાળવવાનું સરળ બને છે.
- તમારા ડેકોરેટર્સનું સંપૂર્ણ પરીક્ષણ કરો: તમારા ડેકોરેટર્સ યોગ્ય રીતે કાર્ય કરે છે અને વિવિધ દૃશ્યોને યોગ્ય રીતે હેન્ડલ કરે છે તેની ખાતરી કરવા માટે યુનિટ ટેસ્ટ લખો.
વાસ્તવિક-દુનિયાના ઉદાહરણો અને ઉપયોગના કિસ્સાઓ
પેરામીટર વેલિડેશન માટે ડેકોરેટર્સનો ઉપયોગ કેવી રીતે કરી શકાય તેના કેટલાક વાસ્તવિક-દુનિયાના ઉદાહરણો અહીં છે:
- API વિનંતી વેલિડેશન: ડેકોરેટર્સનો ઉપયોગ આવનારી API વિનંતી પેરામીટર્સને વેલિડેટ કરવા માટે કરી શકાય છે, જેથી તે અપેક્ષિત ડેટા પ્રકારો અને ફોર્મેટને અનુરૂપ હોય. આ તમારા બેકએન્ડ લોજિકમાં અનપેક્ષિત વર્તનને અટકાવે છે.
એક એવા દૃશ્યનો વિચાર કરો જ્યાં API એન્ડપોઇન્ટ
username,email, અનેpasswordજેવા પેરામીટર્સ સાથે યુઝર રજિસ્ટ્રેશન વિનંતીની અપેક્ષા રાખે છે. ડેકોરેટર્સનો ઉપયોગ એ વેલિડેટ કરવા માટે થઈ શકે છે કે આ પેરામીટર્સ હાજર છે, સાચા પ્રકારના (સ્ટ્રિંગ) છે, અને ચોક્કસ ફોર્મેટને અનુરૂપ છે (દા.ત., રેગ્યુલર એક્સપ્રેશનનો ઉપયોગ કરીને ઈમેલ એડ્રેસ વેલિડેશન). - ફોર્મ ઇનપુટ વેલિડેશન: ડેકોરેટર્સનો ઉપયોગ ફોર્મ ઇનપુટ ફીલ્ડ્સને વેલિડેટ કરવા માટે કરી શકાય છે, જેથી વપરાશકર્તાઓ માન્ય ડેટા દાખલ કરે. ઉદાહરણ તરીકે, પોસ્ટલ કોડ ફીલ્ડમાં કોઈ ચોક્કસ દેશ માટે માન્ય પોસ્ટલ કોડ ફોર્મેટ છે તે વેલિડેટ કરવું.
- ડેટાબેઝ ક્વેરી વેલિડેશન: ડેકોરેટર્સનો ઉપયોગ ડેટાબેઝ ક્વેરીઝમાં પસાર થતા પેરામીટર્સને વેલિડેટ કરવા માટે કરી શકાય છે, જે SQL ઇન્જેક્શનની નબળાઈઓને અટકાવે છે. ડેટાબેઝ ક્વેરીમાં ઉપયોગ કરતા પહેલા વપરાશકર્તા-પૂરા પાડવામાં આવેલ ડેટાને યોગ્ય રીતે સેનિટાઇઝ કરવામાં આવે તેની ખાતરી કરવી. આમાં ડેટા પ્રકારો, લંબાઈ, અને ફોર્મેટ તપાસવાનો, તેમજ દૂષિત કોડ ઇન્જેક્શનને રોકવા માટે વિશેષ અક્ષરોને એસ્કેપ કરવાનો સમાવેશ થઈ શકે છે.
- કન્ફિગરેશન ફાઇલ વેલિડેશન: ડેકોરેટર્સનો ઉપયોગ કન્ફિગરેશન ફાઇલ સેટિંગ્સને વેલિડેટ કરવા માટે કરી શકાય છે, જેથી તે સ્વીકાર્ય રેન્જમાં અને સાચા પ્રકારના હોય.
- ડેટા સિરિયલાઇઝેશન/ડિસિરિયલાઇઝેશન: ડેકોરેટર્સનો ઉપયોગ સિરિયલાઇઝેશન અને ડિસિરિયલાઇઝેશન પ્રક્રિયાઓ દરમિયાન ડેટાને વેલિડેટ કરવા માટે કરી શકાય છે, જે ડેટાની અખંડિતતા સુનિશ્ચિત કરે છે અને ડેટા કરપ્શનને અટકાવે છે. JSON ડેટાની પ્રક્રિયા કરતા પહેલા તેની રચનાને વેલિડેટ કરવી, જરૂરી ફીલ્ડ્સ, ડેટા પ્રકારો, અને ફોર્મેટ લાગુ કરવા.
અન્ય વેલિડેશન તકનીકો સાથે ડેકોરેટર્સની તુલના
જ્યારે ડેકોરેટર્સ પેરામીટર વેલિડેશન માટે એક શક્તિશાળી સાધન છે, ત્યારે અન્ય વેલિડેશન તકનીકોની તુલનામાં તેમની શક્તિઓ અને નબળાઈઓને સમજવું આવશ્યક છે:
- મેન્યુઅલ વેલિડેશન: મેન્યુઅલ વેલિડેશનમાં સીધા ફંક્શન્સની અંદર વેલિડેશન લોજિક લખવાનો સમાવેશ થાય છે. આ અભિગમ કંટાળાજનક અને ભૂલ-સંભવિત હોઈ શકે છે, ખાસ કરીને જટિલ વેલિડેશન નિયમો માટે. ડેકોરેટર્સ વધુ ઘોષણાત્મક અને પુનઃઉપયોગી અભિગમ પ્રદાન કરે છે.
- વેલિડેશન લાઇબ્રેરીઓ: વેલિડેશન લાઇબ્રેરીઓ પૂર્વ-નિર્મિત વેલિડેશન ફંક્શન્સ અને નિયમોનો સમૂહ પ્રદાન કરે છે. જ્યારે આ લાઇબ્રેરીઓ ઉપયોગી હોઈ શકે છે, ત્યારે તે ડેકોરેટર્સ જેટલી લવચીક અથવા કસ્ટમાઇઝેબલ ન હોઈ શકે. Joi અથવા Yup જેવી લાઇબ્રેરીઓ સમગ્ર ઓબ્જેક્ટ્સને વેલિડેટ કરવા માટે સ્કીમા વ્યાખ્યાયિત કરવા માટે ઉત્તમ છે, જ્યારે ડેકોરેટર્સ વ્યક્તિગત પેરામીટર્સને વેલિડેટ કરવામાં શ્રેષ્ઠ છે.
- મિડલવેર: મિડલવેરનો ઉપયોગ વેબ એપ્લિકેશન્સમાં વિનંતી વેલિડેશન માટે વારંવાર થાય છે. જ્યારે મિડલવેર સમગ્ર વિનંતીઓને વેલિડેટ કરવા માટે યોગ્ય છે, ત્યારે ડેકોરેટર્સનો ઉપયોગ વ્યક્તિગત ફંક્શન પેરામીટર્સના વધુ સૂક્ષ્મ વેલિડેશન માટે કરી શકાય છે.
નિષ્કર્ષ
જાવાસ્ક્રિપ્ટ ડેકોરેટર્સ પેરામીટર વેલિડેશન લાગુ કરવા માટે એક શક્તિશાળી અને સુંદર માર્ગ પૂરો પાડે છે. ડેકોરેટર્સનો ઉપયોગ કરીને, તમે કોડ વાંચનીયતા સુધારી શકો છો, બોઇલરપ્લેટ કોડ ઘટાડી શકો છો, કોડ પુનઃઉપયોગિતા વધારી શકો છો, અને વેલિડેશન લોજિકને મુખ્ય બિઝનેસ લોજિકથી અલગ કરી શકો છો. ભલે તમે APIs, વેબ એપ્લિકેશન્સ, અથવા અન્ય પ્રકારના સોફ્ટવેર બનાવી રહ્યા હોવ, ડેકોરેટર્સ તમને ડેટાની અખંડિતતા સુનિશ્ચિત કરવામાં અને વધુ મજબૂત અને જાળવણીક્ષમ કોડ બનાવવામાં મદદ કરી શકે છે.
જેમ જેમ તમે ડેકોરેટર્સનું અન્વેષણ કરો, ત્યારે શ્રેષ્ઠ પદ્ધતિઓનું પાલન કરવાનું યાદ રાખો, વાસ્તવિક-દુનિયાના ઉદાહરણોને ધ્યાનમાં લો, અને તમારી ચોક્કસ જરૂરિયાતો માટે શ્રેષ્ઠ અભિગમ નક્કી કરવા માટે ડેકોરેટર્સની અન્ય વેલિડેશન તકનીકો સાથે તુલના કરો. ડેકોરેટર્સ અને પેરામીટર વેલિડેશનમાં તેમના ઉપયોગની નક્કર સમજ સાથે, તમે તમારા જાવાસ્ક્રિપ્ટ કોડની ગુણવત્તા અને વિશ્વસનીયતામાં નોંધપાત્ર વધારો કરી શકો છો.
વધુમાં, TypeScript નો વધતો સ્વીકાર, જે ડેકોરેટર્સ માટે મૂળભૂત સપોર્ટ પ્રદાન કરે છે, તે આ તકનીકને આધુનિક જાવાસ્ક્રિપ્ટ ડેવલપમેન્ટ માટે વધુ આકર્ષક બનાવે છે. પેરામીટર વેલિડેશન માટે ડેકોરેટર્સને અપનાવવું એ સ્વચ્છ, વધુ જાળવણીક્ષમ, અને વધુ મજબૂત જાવાસ્ક્રિપ્ટ એપ્લિકેશન્સ લખવા તરફનું એક પગલું છે.